"""
90篇棋牌类文档处理
标题行之后随机插入一段文字及一幅图片
"""
import pythoncom
import os
from docx import Document
from docx.opc.exceptions import PackageNotFoundError
from docx.shared import Inches


# 读取文件夹下的特定后缀的文件名列表
def file_name(file_dir, file_format):
    file_list = []
    for root, dirs, files in os.walk(file_dir):
        for file in files:
            if os.path.splitext(file)[1] == file_format:
                file_list.append(os.path.join(root, file))
    return file_list


# 标题行之后插入一段文字及一幅图片
def add_para_picture(doc, para, picture):
    try:
        run = doc.paragraphs[0].add_run("\n" + para)
        #run.add_break()
        #run.add_picture(picture, width=Inches(5.25))
        return True
    except Exception as e:
        print(e)
        print("图片不符合要求：", picture)
        return False


# 随机取列表中的一个值返回
def pick_random_one(list):
    import random
    return random.choice(list)


def main():
    file_list = file_name("D:\\文件处理\\2020.8.12-88篇棋牌\\M", ".docx")
    print(len(file_list))

    picture_list_M = file_name("D:\\文件处理\\麻将图片", ".jpg")
    para_list_M = ['麻将_具体玩法介绍', '麻将_安卓版下载', '麻将_手机版下载']

    picture_list_N = file_name("D:\\文件处理\\扑克图片", ".jpg")
    para_list_N = ['扑克_具体玩法介绍', '扑克_安卓版下载', '扑克_手机版下载']

    picture_list_D = file_name("D:\\文件处理\\斗地主", ".jpg")
    para_list_D = ['斗地主_具体玩法介绍', '斗地主_安卓版下载', '斗地主_手机版下载']

    # if len(picture_list) < len(file_list):
    #     print("图片素材不足！必须是文章数量的一倍以上")
    #     return

    for file in file_list:
        pythoncom.CoInitialize()
        try:
            doc = Document(file)
            # 分离路径和文件名
            # (filepath, filename) = os.path.split(file)
            # if filename.startswith('M'):
            #     para = pick_random_one(para_list_M)
            #     picture = pick_random_one(picture_list_M)
            #     # print(picture)
            #     while not add_para_picture(doc, para, picture):
            #         # 若插入图片失败，删除不适用的图片素材，并重新选图
            #         picture_list_M.remove(picture)
            #         picture = pick_random_one(picture_list_M)
            #     # 插入图片成功，则保存文件
            #     doc.save(file)
            #     # 删除已使用过的图片素材
            #     picture_list_M.remove(picture)
            # elif filename.startswith('N'):
            #     para = pick_random_one(para_list_N)
            #     picture = pick_random_one(picture_list_N)
            #     # print(picture)
            #     while not add_para_picture(doc, para, picture):
            #         # 若插入图片失败，删除不适用的图片素材，并重新选图
            #         picture_list_N.remove(picture)
            #         picture = pick_random_one(picture_list_N)
            #     # 插入图片成功，则保存文件
            #     doc.save(file)
            #     # 删除已使用过的图片素材
            #     picture_list_N.remove(picture)
            # elif filename.startswith('D'):
            #     para = pick_random_one(para_list_D)
            #     picture = pick_random_one(picture_list_D)
            #     # print(picture)
            #     while not add_para_picture(doc, para, picture):
            #         # 若插入图片失败，删除不适用的图片素材，并重新选图
            #         picture_list_D.remove(picture)
            #         picture = pick_random_one(picture_list_D)
            #     # 插入图片成功，则保存文件
            #     doc.save(file)
            #     # 删除已使用过的图片素材
            #     picture_list_D.remove(picture)
            # else:
            #     print('未知的文件类型！')

            # 麻将
            para = pick_random_one(para_list_M)
            picture = pick_random_one(picture_list_M)
            while not add_para_picture(doc, para, picture):
                # 若插入图片失败，删除不适用的图片素材，并重新选图
                picture_list_M.remove(picture)
                picture = pick_random_one(picture_list_M)
            # 插入图片成功，则保存文件
            doc.save(file)
            # 删除已使用过的图片素材
            picture_list_M.remove(picture)

            # 扑克
            # para = pick_random_one(para_list_N)
            # picture = pick_random_one(picture_list_N)
            # while not add_para_picture(doc, para, picture):
            #     # 若插入图片失败，删除不适用的图片素材，并重新选图
            #     picture_list_N.remove(picture)
            #     picture = pick_random_one(picture_list_N)
            # # 插入图片成功，则保存文件
            # doc.save(file)
            # # 删除已使用过的图片素材
            # picture_list_N.remove(picture)
        except PackageNotFoundError:
            pass
        finally:
            # 释放资源
            pythoncom.CoUninitialize()


if __name__ == '__main__':
    main()
